<?php
/* 
 WRITE.INC.PHP by martin $ 2010/06/01 07:37:28
*/

checkADMIN();

if(is_file(LOG.($Ym=date('Ym')).EXT) ){
 $bakTime = time();
 rewrite(DB.$Ym.'_'.md5(OPASS).'_log.bak', file(LOG.$Ym.EXT)); // ログのバックアップ
}

$amazon_env = (USE_AMAZON_ASSOCIATE) ?
'<div id="amazon_window" style="display:none;"><iframe id="amazon" src="about:blank" frameborder="0"></iframe></div>' : '';

include_once (OD.'tags.ini.php');
$tags_freq = array();
$tags_size = count($TAGS_LIST);
foreach ($TAGS_LIST as $i => $tag){
 list($t,$ids) = explode('|', $tag);
 $tags_freq[] = sprintf("%02s", substr_count($ids, ','))."\t".sprintf( "%02s", $tags_size - $i)."\t".$t;
}
usort($tags_freq, 'SORT_BY_DATE');
$tags_freq = preg_replace('{[^\t]+?\t[^\t]+?\t(.+$)}', '$1', $tags_freq);
$tags_freq = implode(',', $tags_freq);

function write_form($quoted=FALSE){
 global $DIVISION, $SESSION, $_ARTCL_BOX_FORMAT, $_SMILIES, $hd, $mode, $maxsize, $amazon_env, $Ym, $bakTime, $tags_freq;
 $uid = time();
 $date = date('Ymd', $uid);
 $UID = g_('UID');
 $_hd = checkHoliday($date) ? "&nbsp;<span class=\"holiday\">".$hd->holidays[$date]."</span>" : '';
 
 $ip = getenv('REMOTE_ADDR') ? getenv('REMOTE_ADDR') : $_SERVER['REMOTE_ADDR'];
 $_ip = implode('', array_slice($sip=explode('.', $ip), 0, 2));
 $key = urlencode(my_encrypt(md5($_ip.OPASS)));
 $helperState = isset($_COOKIE['PPBLOG_HELPER_STATE']) ? $_COOKIE['PPBLOG_HELPER_STATE'] : 1;

 if($quoted){
  $_req = sanitize_data($_REQUEST);
  if(isset($_req['url'],$_req['title'],$_req['text'])){
   $quoted = '<a href="'.$_req['url'].'">'.$_req['title'].'</a>'.NL
          . '<div class="quote">'.$_req['text'].'</div>'.NL;
  }
 }
 $body = '
<ul class="p2em" style="padding: 1em; display:'.($helperState?'block':'none').';">
 <li>タイトルは後からでも結構ですが，内容は必須です</li>
 <li>画像や添付ファイルはいくらでも付けることが出来ます</li>
 <li>テキストエリア下のボックスでタグ(キーワード)をセットすることが出来ます。複数ある場合は<strong>[カンマ + 半角スペース]</strong>で区切ります<br/>
 <span style="color: #ff4411;">(具体例) health care, KISS X3, カメラ</span></li>
 <li>テキストエリアはマウスでサイズを自由に変更できます。</li>
 <li>動画へのリンクタグ挿入も可能です。代表的な動画サイトのプルダウンメニューを用意してます。動画リンクへのIDを入力すれば、独自の動画タグが補完されます <span style="color: #ff4411;">(タグ作法) [(動画サイトタグ):(リンクID):(横幅):(縦幅)]</span></li>
 <li>ある位置から下の文章を隠したいときは「続」ボタンを使います。</li>
 <li>部分的に文章を隠したいときにも「続」ボタンを使います。マウスで隠したい範囲を選択して、ボタンを押せばその部分を隠すようにタグが挿入されます。</li> <li>IMGタグ内のALT属性は独自のフォーマットで、以下のような形式です。<strong>ALT</strong>以下は編集が可能です。
  <p class="exp" style="font-size:15px; text-align:left;">&lt;img src="PIX/1234567890_foo.jpg" alt="filesize:w:h:thumb_w:thumb_h:<strong>ALT</strong>:(left|center|right):shadow[01]:border[01]:caption:polaroid[01]:"/&gt;</p>
 </li>
 '.(is_file(DB.$Ym.'_'.md5(OPASS).'_log.bak') ? '
 <li>不測の事態に備えて、<strong>'.date('Y/m/d H:i:s', $bakTime).'</strong> 時点のログファイルを <strong>'.DB.'</strong> ディレクトリに保存しています。</li>' : '').'
</ul><p class="helper" onclick="toggleHelper(this);">　</p>
<script type="text/javascript">/*<![CDATA[*/
 var smilies = new Array(
 ';
 $i = 0;
 foreach ($_SMILIES as $txt=>$img){
  if($i==count($_SMILIES)-1){
   $body .= '["'.$txt.'",\''.$img.'\']'.NL;
  } else $body .= '["'.$txt.'",\''.$img.'\'],'.NL;
  $i++;
 }
 $body .= ' );
 var smileyArray = [
 ';
 $i = 0;
 foreach ($_SMILIES as $txt=>$img){
  $imgn = preg_replace('|<img.+?src="smiley/([^"]*?)"[^\/]+? />|', '$1', $img);
  $_txt = preg_replace('/(\[|\/\])/', '', $txt);
  if($i==count($_SMILIES)-1){
   $body .= "'$imgn,$_txt,Editor.smiley(\'$txt\')'".NL;
  } else $body .= "'$imgn,$_txt,Editor.smiley(\'$txt\')',".NL;
  $i++;
 }
 $body .= ' ];
 ';
 $_box = preg_replace("{[\r\n]*}", '', _box(time(),'%CAT%','%TITLE%','%COM%','%AUTHOR%',0,0,array(0,1),array(0,1),'%CAT_ICON%|32|32',1));
 $_box = preg_replace("{<!--.*?-->}", '', str_replace("'", "\'", $_box));
 $_box = preg_replace('{<([^ ]+?) class="article\-cat\-icon">.+?</\\1>}', '', $_box);
 $_box = preg_replace('{<div class="article-bottom">.+?</div>}', '', $_box);
 $body .= '
 var ARTICLE_BOX = \''.$_box.'\';
 
 function ppDraw(){
  var w = o("#upfiles");
  w.css("overflow:hidden;");
  w.child(0).sizeTo(560, 450).src("ppdraw.php?mode=init&UID='.$uid.'");
  w.sizeTo(600, 500).moveTo(parseInt( (oParts.metrics(0)-600)*.5 ), oParts.metrics(3) + 30).show();
 }
 /*]]>*/</script>
<form id="writeForm" method="post" action="admin.php" enctype="multipart/form-data" style="width:95%;">
<fieldset><legend>新しい記事の作成</legend>
 <div class="hidden">
 <input type="hidden" name="UID" id="UID" value="'.$uid.'" />
 <input type="hidden" name="rnd" id="rnd" value="'.substr(md5($_ip).md5(OPASS), mt_rand(0,55), 8).'" />
 <input type="hidden" name="maxsize" id="maxsize" value="'.$maxsize.'" />
 <input type="hidden" name="autoposted" id="autoposted" value="0" />
 <input type="hidden" name="session_user" id="session_user" value="'.ONAME.'" />
 <input type="hidden" name="mode" id="mode" value="submit" />
 <span id="polaroid-info">'.PICTURE_POLAROID.'</span>
 </div>
 <div class="entry-info">
  <strong>タイトル:</strong><input name="title" id="_title" type="text" size="30" style="width:340px;" value="" tabindex="1" />&nbsp;
  '.(MODE_STATIC ? '<label for="pm_title">PermaLink</label><img src="Images/help.png" alt="" class="info-icon"
   onclick="o(\'#pm-help\').moveTo(oParts.target(0) + 10, oParts.target(1) - 90).toggle();">
   <div id="pm-help" style="display: none; width: 280px;" class="help">
   静的リンク出力で使用するタイトルです。半角の英数字とハイフン（-）、アンダースコア（_）のみ使用できます。空白でも構いません。</div><input name="pm_title" id="pm_title" type="text" size="60" style="width:250px;" class="text" value="" />' : '').'
   <br />
  <strong>カテゴリー:</strong> '.cat_select().'&nbsp;&nbsp;
  <strong title="書き手">Author:</strong> '.author_select($SESSION->owner()).'&nbsp;&nbsp;
 </div>
 <div style="padding:.5em 0 .4em .7em; font-size:80%;">
  <label for="timestamp" class="" title="チェックすると，変更した日付で投稿できます。">日付の修正</label>
  <input type="checkbox" class="checkbox" name="mod_date" value="1" id="timestamp"  /> 
  <input type="text" onfocus="_checked()" class="alnum" name="Y" id="Y" value="'.date('Y', $uid).'" size="4" maxlength="4" /> 年
  <input type="text" onfocus="_checked()" class="alnum" name="m" id="m" value="'.date('m', $uid).'" size="2" maxlength="2" /> 月
  <input type="text" onfocus="_checked()" class="alnum" name="d" id="d" value="'.date('d', $uid).'" size="2" maxlength="2" /> 日
  <input type="text" onfocus="_checked()" class="alnum" name="H" id="H" value="'.date('H', $uid).'" size="2" maxlength="2" /> 時
  <input type="text" onfocus="_checked()" class="alnum" name="i" id="i" value="'.date('i', $uid).'" size="2" maxlength="2" /> 分
  <input type="text" onfocus="_checked()" class="alnum" name="s" id="s" value="'.date('s', $uid).'" size="2" maxlength="2" /> 秒&nbsp;
  <input type="image" src="button/clock.png" class="time-now" alt="set time" onclick="var ot = o(this), t = new Date();
   ot.sib(-7).$.checked = 1; ot.sib(-6).value(t.getFullYear()); ot.sib(-5).value(t.getMonth()+1);
   ot.sib(-4).value(t.getDate()); ot.sib(-3).value(t.getHours());
   ot.sib(-2).value(t.getMinutes()); ot.sib(-1).value(t.getSeconds()); return false;" title="現在の時刻をセット" />&nbsp;&nbsp;
  '.(is_file(PATH.'spainter_all.jar') ? '<input type="button" class="amazon-button" onclick="ppDraw();return false;" value="しぃペインター" />&nbsp;' : '')
  .(USE_AMAZON_ASSOCIATE?'<input type="button" class="amazon-button" onclick="amazon();return false;" value="Amazonアソシエイト" />':'').'
 </div>
 '.$amazon_env.'
 <div id="toolBar"><script type="text/javascript">/*<![CDATA[*/writeToolBar('.ENABLE_BR.','.ENABLE_COMMENT.','.ENABLE_TRACKBACK.',1,'.$helperState.');/*]]>*/</script></div>
 <div id="writing-area">
  <div class="page-tab" id="Page1Tab">
   <span class="autosave">
    <input type="checkbox" name="autoSaveServer" onclick="toggleAutoSave();" id="autoSaveServer" value="sv" />
    <label for="autoSaveServer" id="autoSaveServerLabel" title="ドラフト投稿として下書き保存"> オートドラフト
     <img id="clock" src="button/timer.gif" alt="" width="18" height="18" onclick="toggleAutoSave(1);" style="display:none; vertical-align:middle;" />
    </label>&nbsp;
    <span id="autosave-info"></span><span id="localsave"></span>
    <button id="saveNow" type="button" onclick="AutoSaveLocal()" title="ブラウザのローカル保存機能を利用します">ローカル保存</button>
    <span id="savedInfo"></span>
    <button type="button" onclick="showDataHistory()" title="保存したデータを閲覧・追加できます">保存履歴</button>
   </span>
   <span class="pagetab"> Page 1 </span>
  </div>
  <textarea name="excerpt" id="excerpt" rows="3" cols="60"
   style="display:none;background: #fff url(Images/excerpt.png) no-repeat top right;"></textarea>
  <textarea name="com" id="Page1" onfocus="ed=this;" rows="20" cols="60" tabindex="2">'.$quoted.'</textarea><div class="textareaHandler" title="マウスドラッグでテキストエリアのサイズを変更できます">::::::::::</div>
  <label for="_tags"><strong>Tags: </strong></label>
  <input type="text" name="tags" id="_tags" size="60" value="" style="width:450px;" tabindex="3"'.(empty($tags_freq) ? '' :
  ' onkeyUp="kup(oParts.evt.keyCode)"').' />
  ';
  if(!empty($tags_freq)){
   $body .= '<script type="text/javascript">/*<![CDATA[*/
   var h = "", tagfield = o("#_tags"), mtags = "'.trim($tags_freq).'".split(",");
   if(mtags){
    var hoverlist = oParts.create("div", "position:absolute;border: solid 1px #333; width: 150px; height: 200px; background: #fff; overflow-y:scroll; display: none;");
    h += \'<table style="width: 100%; font-size: 13px; color: #333;">\';
    for (var i = 0, l = mtags.length; i < l; i++) h += \'<tr><td>\' +mtags[i]+ \'</td></tr>\';
    h += \'</table>\';
    hoverlist.html(h);
    tagfield.parent().addChild(hoverlist);
    var tds = o("td", hoverlist.$); tds.css("text-align: left");
    tds.on("mouseover", function(e){ this.style.backgroundColor="highlight"; this.style.color="highlighttext";});
    tds.on("mouseout", function(e){ this.style.backgroundColor="#fff"; this.style.color="#333";});
    tds.on("click", function(){
     var val = o("#_tags").$.value; val += ", "+this.innerHTML; val = val.replace(/,[\s　]*,/g, ", ").replace(/^,/, "");
     o("#_tags").$.value = val; hoverlist.hide();
    });
    o("textarea").on("click", function(){ hoverlist.hide(); });
    tagfield.on("click", function(){
     hoverlist.toggle().css("top:" +(tagfield.$.offsetTop - 200) + "px; left:" + tagfield.$.offsetLeft + "px");
     if(oParts.client.IE6 || oParts.client.IE7) hoverlist.moveTo(oParts.evt.pageX, oParts.evt.pageY - 200);
    });
    function kup(e){
     switch (e){
      case 8 : case 32 : case 188 : hoverlist.show(); break;
      case 13 : hoverlist.hide(); break;
     }
    }
   }
   var dirSize = [], uploadChecker = null;
  oParts.start(function(){
   var start = new Date().getTime();
   oParts.server.get("upload.php?type=dirsize", function(current){
    dirSize.push(current);
    var delay = new Date().getTime() - start;
    dirSize.unshift(delay);
   });
  });
  function startUpload(){
   var doc  = o("#upfiles").$.firstChild.document || o("#upfiles").$.firstChild.contentDocument;
   var src = doc.getElementById("src").files, count = src.length;
   var FileSize = 0;
   var progressBar = o("#progressbar").show();
   var tick = Math.round(dirSize.shift() * .9);
   for (var i = 0; i < count; i++){
    FileSize += parseInt(src[i].fileSize);
   }
  uploadChecker = setInterval(function(){
   if(!progressBar.visible()) return;
   oParts.server.get("upload.php?type=dirsize", function(current){
    if(current === dirSize[0]){
     clearInterval(uploadChecker);
     progressBar.child(0).css("width: 100%");
     progressBar.fade();
    }
    if(dirSize[dirSize.length - 1] !== current){
     if(dirSize[dirSize.length - 1] < current && current > dirSize[0]){
      progressBar.child(0).css("width:" + ((current - dirSize[0]) / FileSize) * 100 + "%");
     }
     dirSize.push(current);
    }
   });
  }, tick);
 }
  /*]]>*/</script>
  ';
 }
 $body .= '</div>
 <div style="margin: .5em 2em;">
 <input style="border:none;" type="checkbox"'.(UPDATE_PING_ON?' checked="checked"':'').' name="xmlrpc_ping" value="1" id="up"
  onclick="ping_form(\'ping-sites\',\'up\');return true;" />
  <label for="up" title="新規投稿をPingサイトに自動で知らせます"> PingServerに更新を知らせる</label>
 <div id="pingarea">
 <span onclick=\'o("#ping-sites").toggle();return false;\'>
  この部分をクリックすると，PING更新サーバーの一覧表の表示・非表示を切り替えることが出来ます。
 </span>
 <table id="ping-sites" style="margin: .6em 0 .6em 3em; width: 400px; display:none; text-align: left;">
  <tr><td colspan="3" style="padding-bottom: .7em;">■ チェックしてあるPingサーバーに記事の新着を知らせます。</td></tr>
  '.added_pings().'
 </table>
 </div>
 <input type="checkbox" name="send_ping_auto" value="1" id="at" />
  <label for="at" title="記事中のリンク先でTrackbackに対応したサイトを自動で検出，トラックバックします">
   Auto-Trackbackする</label>
 <input style="border:none;" type="checkbox" name="send_ping_manu" value="1" id="sp"
  onclick="ping_form(\'pingform\',\'sp\');return(true);" />
  <label for="sp" title="手動でTrackbackするURLなどを設定します">
   手動でTrackbackする</label>
 '.ping_form('必須です。', BLOG_NAME).'
 </div>
 <div class="entry-submit">
  <input type="submit" class="button" title=" この内容で投稿(公開) " value=" 公 開 " onclick="return _onsubmit();">&nbsp;
  <input type="submit" class="button" name="draft" title="記事は公開されません" value="ドラフト"> &nbsp;&nbsp;&nbsp;
  <input type="button" class="pv-toggle" name="toggle" title="その場で見栄えのチェック" value="ローカルプレビュー">
 </div>
 </fieldset>
 </form>
<div id="preViewArea" style="display: none;"><div id="pv-content" class="article content"></div></div>
<div id="upfiles"><iframe src="" title="upload.php?mode=write&amp;UID='.$uid.'&amp;KY='.$key.'" frameborder="0"></iframe></div>
<div id="progressbar"><div style="width: 0;"></div><p></p></div>
';
 return $DIVISION['body'] .= $body;
}

function added_pings(){
 global $PING_LIST;
 include_once (OD.'ping.ini.php');
 $t = '';
 foreach ($PING_LIST as $i=>$p){
  list($p_n, $p_t, $p_s, $def) = explode('|', $p);
  $checked = ($def==1) ? ' checked="checked"' : '';
  $p_s = empty($p_s) ? '' : '[ <a href="http://'.$p_s.'" onclick="window.open(this.href,\'\');return false;">'.$p_s.'</a> ]';
  $t .= '<tr><td >　<input type="checkbox"'.$checked.' name="pings['.$i.']" value="1" id="p'.$i.'" /> <label for="p'.$i.'">'.$p_n.$p_s.'</label></td><tr>'.NL;
 }
 return $t;
}

function author_select($author=ONAME){
 global $USR_LIST, $SESSION;
 if(!is_array($USR_LIST)) include_once (OD.'usrlist.ini.php');
 $body  ='<select name="author" id="author">'.NL;
 if(!isUserLoggedIn()){
  $body .= '<option value="'.ONAME.'"> '.ONAME.'　 </option>
  ';
 }
 foreach ($USR_LIST as $U){
  list(,$ID,,$ALIAS) = explode('|', $U);
  $UNAME = $ALIAS!='' ? $ALIAS : $ID;
  if($SESSION->owner()==ONAME){
   $sel = $author==$UNAME ? ' selected="selected"' : '';
   $body .= ' <option value="'.$UNAME.'"'.$sel.'> '.$UNAME.'　 </option>'.NL;
  } else {
   if($SESSION->owner()==$UNAME){
    $body .= ' <option value="'.$UNAME.'"> '.$UNAME.'　 </option>'.NL;
   }
  }
 }
 $body .= '</select>'.NL;
 return $body;
}

?>
